聖剣伝説バイナリ改造 @Wiki

BNE2 - Tips

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

BNE2 Tips(改造ヒント集)


FAQのノリで、使いこなしのコツなど書き加えていってください。
間違いを見つけた人は遠慮なく訂正するでち。

  • セル幅の調節を保存するには、ファイル→設定の保存

  • データの表示形式を変えたい場合、表示→選択セクションの表示
表示形式を変えた後、ファイル→設定の保存 を行うと、
INIファイルが上書きされる。

  • 複数のセルをまとめてコピーしたいとき
リスト形式のセクションの表示形式を
数値表示(16進,10進数)に変えておくとスムーズ。
キーボード編集派の人にもオススメ。
セルを選択後にメニューの「表示」→「選択セクションの表示」

  • BNE2は同時に複数起動できます。
ROMから別のROMへデータをコピー&ペーストするもよし、
ROMとRAMを両方参照しながら解析するもよし。

  • ROM/RAM設定する前にうっかりファイルを開いてしまっても、
その他→設定でRom/Ramの切り替えが出来る
(ファイルは再読み込みされる)

  • BNE2を開いたままでもINIファイルを編集できる。
INIファイルをエディタで編集して上書き保存した後、
ROMなどを再読み込み or BNE2を起動しなおすと、設定が反映される。

  • テストプレイ用にエミュ設定
ステートセーブ、加速機能などのショートカットキーを
使いやすいようにカスタマイズしておくと効率が良いです
多ボタンのパッドがあるなら、パッドのボタンに設定する手も

  • ステートセーブの活用
SNESGT/ZSNESのステートセーブをBNE2で直接開いて、
知りたい項目の数値を調べると便利
(例えば、店に行かなくても所持金の増減が分かる)
RAM用のiniに書かれているアドレスはメモリアドレス、
つまり改造コードと同じ

  • SNESGTの「メモリビューア」が地味に便利
「オプション」→「ツール」→「メモリビューア」
見たいアドレスまでスクロールするのが大変ではありますが、
メモリの変化がリアルタイムに見られるので、
その処理に使われているメモリがどこなのか一瞬で分かります。
コードサーチ機能は無いですが、実はメモリへの書き込みも
出来るので、アドレスが分かっている場合のコード検証には便利です。
(ステータス画面などの場合、一度画面を切り替えないと
値の表示には反映されないので注意)

  • SNESGTのステートセーブをStirlingなどバイナリエディタで
直接開いた場合、ファイル先頭44hバイトを削除すれば
メモリアドレスと一致する
あるいは、メモリアドレス+44hの場所を見る
(BNE2は、初めから先頭44hを飛ばして読む設定になっています)

  • 通常セーブ(.srm)およびSnes9x系のステートセーブの形式については、良く分かりません。情報求む。

  • 進数表記と略号
h:16進数 (hexadecimal)
b:2進数 (binary)
d:10進数 (decimal)
(進数指定が省略されている場合は10進数のことが多い)

   0xFF=FFh=FF(h)= 1111 1111(b) =255(d)
  0x100=256
 0xFFFF=65535
0x10000=65536

0x63= 99
0x64=100
0x03E7= 999  ROM/RAM内では E7 03 (例外あり)
0x03E8=1000  ROM/RAM内では E8 03 (例外あり)

    +1h= 0000 0001(b) =0bit(.0) =  1 = 2^0
    +2h= 0000 0010(b) =1bit(.1) =  2 = 2^1
    +4h= 0000 0100(b) =2bit(.2) =  4 = 2^2
    +8h= 0000 1000(b) =3bit(.3) =  8 = 2^3
   +10h= 0001 0000(b) =4bit(.4) = 16 = 2^4
   +20h= 0010 0000(b) =5bit(.5) = 32 = 2^5
   +40h= 0100 0000(b) =6bit(.6) = 64 = 2^6
   +80h= 1000 0000(b) =7bit(.7) =128 = 2^7
+100h=0001 0000 0000(b) =8bit     =256 = 2^8

XXh:1Bite= 8bit (0~255) or (-128~0~+127)
XX YYh:2Bite=16bit (0~65535) or (-32768~0~+32767)

  • 16進数、10進数、2進数の変換や計算には
Windows付属の電卓機能が便利。
スタート→プログラム→アクセサリ→電卓
「表示」→「関数電卓」にしてみよう。

  • ビット指定、ビットフィルタの意味
16進数 XY(h)= pqrs tuvw(b) 2進数
例 7A(h)= 0111 1010(b)
p:7bit q:6bit r:5bit s:4bit t:3bit u:2bit v:1bit w:0bit

【例1】
聖剣伝説3、RAM上での精霊取得フラグ(手持ち.ini)
メモリアドレス7FEECFに1バイト XY(h)で記述されています
2進数に直したとき、それぞれの桁が0なら
該当する精霊をまだ得ていないということで、
その桁が1なら、該当する精霊を得たというフラグです
w=1:ノームを得た (0bit→ビット指定.0)
v=1:ジンを得た (1bit→ビット指定.1)
u=1:ウンディーネを得た (2bit→ビット指定.2)
t=1:サラマンダーを得た (3bit→ビット指定.3)
s=1:シェイドを得た (4bit→ビット指定.4)
r=1:ウィスプを得た (5bit→ビット指定.5)
q=1:ルナを得た (6bit→ビット指定.6)
p=1:ドリアードを得た (7bit→ビット指定.7)
(精霊が8種類→8bit=1バイトに収まる)

ノーム、ウンディーネ、シェイド、ウィスプを得ている
0011 0101(b)= 35(h) ※桁の対応に注意

全精霊を得ている
1111 1111(b)= FF(h)

したがって、それぞれの精霊取得フラグを
独立した項目で表示させるには、以下のようになります
セクション名(「ノーム」など)の次の項目がビット指定です。

7FEECF,ノーム,.0,,1,0,,900,,0 |1 Get
7FEECF,ジン,.1,,1,0,,900,,0 |1 Get
7FEECF,ウンディーネ,.2,,1,0,,900,,0 |1 Get
7FEECF,サラマンダー,.3,,1,0,,900,,0 |1 Get
7FEECF,シェイド,.4,,1,0,,900,,0 |1 Get
7FEECF,ウィスプ,.5,,1,0,,900,,0 |1 Get
7FEECF,ルナ,.6,,1,0,,900,,0 |1 Get
7FEECF,ドリアード,.7,,1,0,,900,,0 |1 Get


【例2】
上位2ビットで「方向」を指定
p=0:右 1:左
q=0:上 1:下

下位6ビットで「移動距離」を指定
rstuvw(b)=r*32+s*16+t*8+u*4+v*2+w*1=移動距離

という形式のデータがあるとき

方向の左右だけ知りたい→ビット指定 .7 (pだけ取得、値=0 or 1)
移動距離が奇数か偶数か知りたい
→ビット指定 .0 (wだけ取得、値=0 or 1)
移動距離が32以上/未満の判定を知りたい
→ビット指定 .5 (rだけ取得、値=0 or 1)

移動距離だけ知りたい→ビットフィルタ .3F
(下位6ビットを取得して数値として出力、値=0~63)
取得したいビットの桁を1にした2進数は 00111111(2)=3F(h)なので
ビットフィルタは.3Fになる。

上下左右の方向を一度に取得したい→ビットフィルタ .C0
(上位2ビットを取得して数値として出力、値=[0,64,128,192])
取得したいビットの桁を1にした2進数は 11000000(2)=C0(h)なので
ビットフィルタは .C0になる。
得られた値を÷64(ビットシフト)すれば、[0,1,2,3]の形式になる。@wikiへ

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

記事メニュー
目安箱バナー